package main

import (
	"fmt"
	"os"
	"path/filepath"
)

func main() {
	fileName1 := "./test1"
	// 创建目录，目录存在有错误
	err := os.Mkdir(fileName1, os.ModePerm)
	fmt.Println("Mkdir..", err)

	// 创建多级目录，目录存在没有错误提示
	err = os.MkdirAll("./test1/test2/test3", os.ModePerm)
	fmt.Println("MkdirAll", err)

	// 获取当前目录
	currentDir, err := os.Getwd()
	fmt.Println(err, currentDir)
	fmt.Println(os.ModeDir, os.ModeAppend, os.ModePerm)

	// 创建文件, 如果文件存在会覆盖原文件
	filename := filepath.Join(fileName1, "test2", "test2.txt")
	file1, err := os.Create(filename)
	defer file1.Close()
	fmt.Println(file1, err)

	//获取可执行文件的路径
	ex, err := os.Executable()
	fmt.Println(ex, err)
	// dirname
	fmt.Println(filepath.Dir(ex))

	// open&close file
	opsfile(filepath.Join(fileName1, "test1.txt"))

	//删除文件
	err = os.Remove(filename)
	fmt.Println("删除文件", filename, err)
	// 删除目录下的所有文件
	err = os.RemoveAll(fileName1)
	fmt.Println("RemoveAll", fileName1)
}

func opsfile(filename string) {
	fmt.Println(os.O_RDONLY, os.O_WRONLY, os.O_RDWR, os.O_CREATE, os.O_APPEND,
		os.O_TRUNC, os.O_EXCL)
	//读写的方式打开文件，如果文件不存在就创建
	file, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, 0666)
	defer file.Close()
	fmt.Println(file, err)
}
